In ordinary wireless data transmission the radio link level handles flow control, i.e. suspends and resumes the data flow. Usually a sender (either an internal application such as an MMS application (Multimedia Messaging Service) or an external dial-up device, e.g. a laptop) of the uplink data is faster than air interface, and an efficient flow control mechanism is needed for optimal data throughput. For arranging data flow control it is feasible to apply buffering and/or a suspension functionality. When suspension functionality is applied, the lower layer protocol entity may send a suspension request primitive to the sender which then suspends data transmission. In response to a resume request, the data transmission is resumed.
In the 2nd generation GSM/GPRS and in the 3rd generation UMTS of 3GPP (3rd Generation Partnership Project) system the radio links are mainly handled by a radio link layer (RLC) protocol. However, there are several other layers besides the RLC layer, which can start flow control mechanisms for their own purposes (not necessarily related to actual data transmission). The same applies for resuming data transmission, i.e. any underlying protocol layer entity can send the resume request to the sender. In uplink flow control, the sender cannot know which layer and why the data transmission is suspended or resumed, because the flow control primitives are the same regardless of the layer sending them. For instance, if the RLC layer entity in the GPRS stack suspends data transmission, this suspension request primitive is routed via upper layers, i.e. logical link control (LLC), sub-network dependent convergence protocol (SNDCP) and some implementation specific layers to the sender. But there is no difference from the sender point of view if suspension is initiated from some other layer, e.g. SNDCP layer. In data transmission suspension, it does not matter if the sender receives several suspension primitives from different lower layers. Data transmission is suspended after the first primitive and the following primitives can be ignored. In data transmission resume, when the sender receives the first resume request primitive, it starts again uplink data transmission. However, in this case certain layers which have also initiated suspension, but have not yet sent a resume request might not be ready to receive uplink data. Depending on the layer implementation, such layer may discard data packets, or buffer the data until buffers are full and then discard, or do something else which is not optimal for data transmission. Data discarding is especially harmful in TCP/IP data transmission, because TCP will start slow-start mechanism after data loss and thus data throughput suffers.